<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!--点击按钮弹出警告：你别点我-->
    <input type="button" value="点击" onclick="function {alert('你别点我'); }">
    <script>
        f1();
        //函数表达式：把函数当做一个值赋给变量
        //注意：函数表达式必须先声明，再调用
        let f1 =function fun(){
            console.log('hello f1');
        }
        //函数调用：变量名()调用
        f1();
        let f2=function fun2(name){
            console.log('hello'+name);
        }
        f2('张三');
        //匿名函数：函数没有名字
        let f3 =function(a,b){
            return a<b?a:b;
        }
        console.log(f3 (12,8)); //判断最小值
        //立即执行函数：匿名函自调用，用()括起来的部分是一个整体。
        (function (a,b){
            console.log(a+b);
        })(1,2);
        let a =function(){
            console.log(1);
        }
        console.log(typeof a);//函数数据类型：属于object，和数组一样。
        //把函数这个值作为实参传给另一个函数
        //回调函数：把函数A当做参数传给函数B，在函数B中调用函数A，此时函数A叫做回调函数。
        console.log('-------');
        let myf1=function(a){
            a(); //myf2();
        }
        let myf2=function(){
            console.log('myf2');
            return 0;
        }
        myf1(myf2);
        //递归函数：在函数中调用自己。
        //阶乘：10！=10*9*8*7...*1>10*(9!)> 10*9*(8!)> 10*9*8*(7!)
        let jc = function(n){
            if(n===1){
                return 1;
            }else{
                return n*jc(n-1);
            }
        }
        console.log(jc(10));
    </script>
</body>

</html>